package ComoViajo;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

abstract class Recorrido {

	public Collection<Estacion> estaciones = new ArrayList<Estacion>();
	
	/**
	 * @author eugenio
	 * @return el tiempo que tarda en hacer este recorrido
	 */
	abstract public int getTiempo();

	abstract public BigDecimal getCosto();

	
	public String toString(){
		Iterator<Estacion> estacionesIterator = this.estaciones.iterator();
		String recorridoString="";	
		
		if(estacionesIterator.hasNext()){
			recorridoString=estacionesIterator.next().toString();
		}
		
		while(estacionesIterator.hasNext()){
			recorridoString=recorridoString+","+estacionesIterator.next().toString();
		}
		
		return recorridoString;
	}

	public boolean compare(Recorrido recorrido){
		// si son de la misma clase devuelve true 
		if(this.getClass().toString()==recorrido.getClass().toString()){
			return true;
		}
		return false;
	}
	
	/**
	 * @author eugenio
	 * @return el nombre de la clase ej: RecorridoSubte o RecorridoTren
	 */
	public String getClassName(){
		String recorridoClase=this.getClass().toString();
		recorridoClase=recorridoClase.substring(recorridoClase.lastIndexOf('.')+1);
        return recorridoClase;
	}
	
	/**
	 * Calcula el tiempo de transbordo de una estacion a otra
	 * 
	 * @author eugenio
	 * @param recorridoPrev
	 * @return el tiempo de transpordo de estacion a estacion
	 * @throws ComoViajeException en caso de que el transbordo entre estaciones no este seteado 
	 */
	public int getTiempoTransbordo(Recorrido recorridoPrev) throws ComoViajeException {
	    
        //son del mismo tipo
        if(this.compare(recorridoPrev)){

        	if (this.getClassName()=="RecorridoTren") {
        		// recorrido tren tren
        		return 6;
        	} else if (this.getClassName()=="RecorridoSubte") {
        		// recorrido subte subte
        		return 4;
        	}
        }else{
			// recorrido tren subte, o subte tren
        	if ((this.getClassName()=="RecorridoTren")&&(recorridoPrev.getClassName()=="RecorridoSubte")||
        			(this.getClassName()=="RecorridoSubte")&&(recorridoPrev.getClassName()=="RecorridoTren")){
        		return 5;
        	}
        }
		throw new ComoViajeException();
	}

}
